package genericServer.app;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import entility.Job;
import entility.JobImpl;
import entility.Notification;


public class Client extends Thread{

	/**
	 * @param args
	 */

	// 'localhost' ou ip da máquina
	private String server;  
	// porta 
	private int porta;   

	public Client(String server, int porta) {
		super();
		this.server = server;
		this.porta = porta;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// inicializando quem será nosso servidor 

		String server = "localhost";  

		// o numero da porta  

		int porta = 6969;  

		// o numero máx de clientes que podem ser atendidos, mais que isso começaremos a ter muitas exceções  

		int numeroDeClientes = 1;  

		for (int i = 0; i < numeroDeClientes; i++) {    
			// criando um novo cliente para nosso servidor  

			new Client(server, porta).start();    
		}  			
	}

	@Override
	public void run(){
		try{
			while (true){
				// abrindo uma porta para fazermos a comunicação entre nosso cliente e nosso servidor  

				Socket s = new Socket(server, porta); 	            

				Job msg = new JobImpl(Notification.CLIENT);
				msg.setMethod("do");

				ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(s.getOutputStream()));

				out.writeObject(msg);
				out.flush();

				ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(s.getInputStream()));
				Integer response = (Integer) in.readObject();

				System.err.println("client: " + response);

				in.close();
				out.close();			
				s.close();
			}

		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public Client(){
		try{
			Socket s = new Socket("localhost", 6969);
			Job msg = new JobImpl(Notification.CLIENT);
			msg.setMethod("do");

			ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(s.getOutputStream()));

			out.writeObject(msg);
			out.flush();

			ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(s.getInputStream()));
			Integer response = (Integer) in.readObject();

			System.err.println("client: " + response);

			in.close();
			out.close();			
			s.close();

		}catch(Exception e){
			e.printStackTrace();
		}
	}

}
